home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / forthcmp.zip / EXEC.4TH < prev    next >
Text File  |  1992-03-30  |  2KB  |  62 lines

  1. \ DOS EXECUTE LIBRARY
  2. \ Contents Copyright (C) 1991 by Thomas Almy
  3.  
  4. \ Permission is granted to registered users of ForthCMP to sell or distribute
  5. \ computer programs incorporating the compiled contents of this file.
  6.  
  7. \ This file should be loaded at the start of the program. The
  8. \ STRINGS library must be loaded, and loaded before this file.
  9.  
  10. .( Loading EXEC) CR
  11. 10 HEX
  12. DSEG
  13. CREATE xpb 0E ALLOT 
  14. 0 xpb ! -1 xpb 6 + ! -1 xpb 8 + ! -1 xpb 0A + ! -1 xpb 0C + !
  15. CSEG
  16. CREATE ssav 0 , 0 , 
  17. DSEG
  18.  
  19. \ the code for exec could be optimized based on SEPSSEG? and SEPDSEG?
  20. \ either or both being off, but it would not make that much difference
  21. \ in code size.
  22.  
  23. \ code 9C is PUSHF, 9D is POPF
  24.  
  25. 1 0 IN/OUT
  26. CODE exec
  27.     BP PUSH CSEG 9C C, DS PUSHSEG
  28.     AX DX MOV
  29.     CS: ssav 2+ [] SS <SEG  SP CS: ssav [] MOV    
  30.     AX DS <SEG  AX ES >SEG
  31.     4B00 # AX MOV
  32.     xpb # BX MOV
  33.     21 INT
  34.     CS: ssav 2+ [] SS >SEG
  35.     CS: ssav [] SP MOV
  36.     DS POPSEG 9D C, BP POP RET
  37. END-CODE
  38.  
  39. 1 0 IN/OUT
  40. SEPDSEG? #IF
  41. : EXEC
  42.      " COMSPEC" STR>DSEG getenv ?DUP IF
  43.      ASCIIZ 
  44.      SWAP DUP C@ IF \ program to run
  45.           "  /C " STR>DSEG COUNT ROT COUNT STRCAT STRPCK
  46.      ELSE STR>DSEG THEN
  47.      ASCIIZ xpb 2+ ! ?DS: xpb 4 + !
  48.      exec
  49.      ELSE  ." No COMSPEC" BYE THEN ;
  50. #ELSE
  51. : EXEC
  52.      " COMSPEC" getenv ?DUP IF
  53.      ASCIIZ 
  54.      SWAP DUP C@ IF \ program to run
  55.           "  /C " COUNT ROT COUNT STRCAT STRPCK
  56.      ELSE DROP " " THEN
  57.      ASCIIZ xpb 2+ ! ?DS: xpb 4 + !
  58.      exec
  59.      ELSE  ." No COMSPEC" BYE THEN ;
  60. #THEN
  61. 0A = #IF DECIMAL #THEN
  62.